package com.ruoyi.util;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.aliyun.tea.TeaException;
import com.ruoyi.test.Sample;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class AliyunOcrUtil {
    @Value("${aliyun.ocr.AccessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.ocr.AccessKeySecret}")
    private String accessKeySecret;

    @Value("${aliyun.ocr.endpoint}")
    private String endpoint;

    public  com.aliyun.ocr_api20210707.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(accessKeyId)
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
        config.endpoint = endpoint;
        return new com.aliyun.ocr_api20210707.Client(config);
    }

    public Map<String,Object> IdentificationNumberPlate(String imgPath) throws Exception {
        com.aliyun.ocr_api20210707.Client client = this.createClient();
        // 需要安装额外的依赖库，直接点击下载完整工程即可看到所有依赖。
        java.io.InputStream bodyStream = com.aliyun.darabonba.stream.Client.readFromFilePath(imgPath);
        com.aliyun.ocr_api20210707.models.RecognizeCarNumberRequest recognizeCarNumberRequest = new com.aliyun.ocr_api20210707.models.RecognizeCarNumberRequest()
                .setBody(bodyStream);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            com.aliyun.ocr_api20210707.models.RecognizeCarNumberResponse resp = client.recognizeCarNumberWithOptions(recognizeCarNumberRequest, runtime);
            JSONObject jsonObject= JSON.parseObject(resp.body.data);
            JSONObject data=jsonObject.getJSONObject("data");
            //System.out.println(data);
            //车牌
            String licensePlate=data.getJSONObject("data").getString("车牌");
            //汽车类型
            String carType =data.getJSONObject("secondary_cls").getString("type_str");

            Map<String,Object> map=new HashMap<>();
            map.put("licensePlate",licensePlate);
            map.put("carType",carType);
            return map;
        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
        return null;
    }
}
